/**
 * Stack
 */
export default class Stack<T> {
    private items: T[] = [];

    // 入栈操作：向栈中添加一个元素
    push(elment: T): void {
        this.items.push(elment);
    }

    // 出栈操作：从栈中移除并返回栈顶元素
    pop(): T | undefined {
        if (this.isEmpty()) {
            return undefined;
        }
        return this.items.pop();
    }

    // 查看栈顶元素，但不移除
    peek(): T | undefined {
        if (this.isEmpty()) {
            return undefined;
        }
        return this.items[this.items.length - 1];
    }

    // 检查栈是否为空
    isEmpty(): boolean {
        return this.items.length === 0;
    }

    // 获取栈中元素的数量
    size(): number {
        return this.items.length;
    }

    toString(): string {
        return this.items.join(',');
    }
}

// const stack = new Stack();
// stack.push('apple');
// stack.push('banana');
// stack.push('cherry');
// stack.push(1);
// stack.push(2);
// stack.push(true);
// stack.push(false);
// console.log(stack.toString());
